<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 扁平化数组
        // 意思是，一个数组里面嵌套的有其它数组，维数不定，需要我们将他们都放在一个数组里面
        //1.  es5 基础方法实现
        function flattenCommon (arr) {
            var res = []
            for (let i = 0; i < arr.length; i++) {
                if (Array.isArray(arr[i])) {
                    res = res.concat(flattenCommon(arr[i]))
                } else {
                    res.push(arr[i])
                }
            }
            return res
        }
        //2.  使用reduce实现
        function flattenReduce (arr) {
            //第一个return时flattenReduce的返回值，第二个return是reduce的返回值
            return arr.reduce((result, item) => {
                return result.concat(Array.isArray(item) ? flattenReduce(item) : item)
            }, [])
        }
        //3. 使用toString和split实现
        function flattenTostring (arr) {
            return arr.toString().split(',').map(item => { return Number(item) })
        }

        //4. 使用join和split，方法与方法3类似
        function flattenJoin (arr) {
            // join也会将数组里面的内容拼接在一起，变成字符串
            return arr.join(',').split(',')
        }

        // 5.使用扩展运算符
        // 循环遍历，如果当前元素是二维数组，那么就是用扩展运算符
        function flattenKuozhan (arr) {
            while (arr.some(item => Array.isArray(item))) {
                arr = [].concat(...arr)
            }
            return arr
        }

        let arr = [1, 3, 4, 5, [44, 55, 66, 77, [33, 44, 55, 3, 1000, 9999]]]
        let resultCommon = flattenCommon(arr)
        let resultReduce = flattenReduce(arr)
        console.log(resultReduce)

        // console.log(resultArr);
        // console.log(Array.prototype.flat(arr, Infinity))

    </script>
</body>

</html>